# 键值映射的的数据结构   key-value
# 无序
# 可变数据类型
# d1 = {'name':'sc', 'age':18, 'xx':4}
# d2 = {'A':1, [1, 2]:4}  #unhashable type: 'list'
# 字典的key
# 天生去重
# key 必须是hash对象   --不可变数据类型
# vue可以是任何类型

# 字典的取值
# print(d1['name'])
# # print(d1['dsg'])  #如果没有这个key就会抛出异常
# print(d1.get('age'))  #如果没有这个key不会报错， 会返回默认值None
# print(d1.get("xx", 0))  #如果d1能取到xx的值，就返回d1对应的vue,如果取不到，就返回0

# 新增和修改
# d1['name'] = 300
# d1['yy'] = 600  #key存在就是修改，不存在就是新增
# print(d1)

# 字典的遍历
# for i in d1:
#     print(i)
# for k, v in d1.items():
#     print(f"{k} --> {v}")

# 成员关系的判断   in  默认情况下只判断key
# print('name' in d1)
# print(18 in d1.values())

# 不限次数输入，选择3退出
# 1.注册
#  如果有这个用户了，就不用注册
#  用一个字典name_dict = {'root':{'age':18, 'passwd':'123456'},'admin':{'age':18, 'passwd':'admin123456'}
#  输入用户名，年龄，密码
#
# 2.查询
# 输入要查询的姓名，展示这个人的详细信息
# 3.退出
name_dict = {'root':{'age':18, 'passwd':'123456'},'admin':{'age':18, 'passwd':'admin123456'}}
while True:
    cmd_num = input("请输入操作: 1.用户注册/ 2.用户查询/ 3.退出程序:")
    # 用户注册功能
    if cmd_num == "1":
        reg_name = input('请输入注册的姓名：')
        # 通过for遍历列表，取出的每个元素是字典的值
        for user_dict in name_dict:
            print(user_dict)
            # 字典['name']和输入注册的用户名比较是否相等
            if user_dict == reg_name:
                #  如果相等，打印提示：名字在列表中，不允许注册
                print(reg_name, '名字在列表中，不允许注册')
                break
        # for循环的else，循环里面没有执行到break，则会执行else
        else:
            #  输入注册的信息
            reg_age = input('请输入年龄：')
            reg_pwd = input('请输入密码：')
            # 创建一个用来保存输入的字典
            user_dict = {reg_name:{'age': reg_age, 'passwd':reg_pwd}}
            #  字典追加到字典中
            name_dict.update(user_dict)
            print('注册成功')
    #  用户查询功能
    elif cmd_num == "2":
        login_name = input('请输入查询用户名:')
        # 通过for遍历列表，取出的每个元素是key
        for user_dict in name_dict:
            #  字典['name']和查询用户名比较
            # print(login_name)
            # print(user_dict)
            # print(name_dict)
            if user_dict == login_name:
                # 如果相等，输入相关信息
                print(name_dict.get(login_name))
                break
        #  for循环的else，循环里面没有执行到break，则会执行else
        else:
            # 字典中没有查询的对象
            print('无查询的对象')
    elif cmd_num == "3":
        print('退出程序')
        break
    else:
        print("输入错误，重新输入")